package com.app.gamev2.utils

import android.content.Context
import android.os.Build
import android.os.VibrationEffect
import android.os.Vibrator

/**
 * 震动工具类，处理设备震动反馈
 */
object VibrationUtils {
    private const val DEFAULT_VIBRATION_DURATION_MS = 50 // 默认震动持续时间
    private const val JUMP_VIBRATION_DURATION_MS = 100 // 跳跃按钮震动持续时间
    private const val MERGE_VIBRATION_DURATION_MS = 150 // 水桶合并震动持续时间

    /**
     * 检查设备是否支持震动
     * @param context 上下文
     * @return 是否支持震动
     */
    fun hasVibrator(context: Context): Boolean {
        val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
        return vibrator.hasVibrator()
    }

    /**
     * 触发默认震动
     * @param context 上下文
     */
    fun vibrate(context: Context) {
        vibrate(context, DEFAULT_VIBRATION_DURATION_MS)
    }

    /**
     * 触发指定持续时间的震动
     * @param context 上下文
     * @param durationMs 震动持续时间（毫秒）
     */
    fun vibrate(context: Context, durationMs: Int) {
        val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
        
        if (vibrator.hasVibrator()) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                //  Android 8.0及以上版本
                vibrator.vibrate(VibrationEffect.createOneShot(durationMs.toLong(), VibrationEffect.DEFAULT_AMPLITUDE))
            } else {
                // Android 8.0以下版本
                @Suppress("DEPRECATION")
                vibrator.vibrate(durationMs.toLong())
            }
        }
    }

    /**
     * 触发跳跃按钮震动
     * @param context 上下文
     */
    fun vibrateForJump(context: Context) {
        vibrate(context, JUMP_VIBRATION_DURATION_MS)
    }

    /**
     * 触发水桶合并震动
     * @param context 上下文
     */
    fun vibrateForMerge(context: Context) {
        // 创建一个复杂的震动模式：短震动+暂停+短震动
        val pattern = longArrayOf(0, 70, 50, 70) // 开始延迟，震动，暂停，震动（毫秒）
        
        val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
        
        if (vibrator.hasVibrator()) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                // Android 8.0及以上版本
                vibrator.vibrate(VibrationEffect.createWaveform(pattern, -1))
            } else {
                // Android 8.0以下版本
                @Suppress("DEPRECATION")
                vibrator.vibrate(pattern, -1)
            }
        }
    }

    /**
     * 触发游戏胜利震动
     * @param context 上下文
     */
    fun vibrateForWin(context: Context) {
        // 创建一个连续的短震动模式
        val pattern = longArrayOf(0, 50, 50, 50, 50, 50) // 开始延迟，震动，暂停，震动，暂停，震动（毫秒）
        
        val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
        
        if (vibrator.hasVibrator()) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                // Android 8.0及以上版本
                vibrator.vibrate(VibrationEffect.createWaveform(pattern, -1))
            } else {
                // Android 8.0以下版本
                @Suppress("DEPRECATION")
                vibrator.vibrate(pattern, -1)
            }
        }
    }

    /**
     * 触发游戏失败震动
     * @param context 上下文
     */
    fun vibrateForLose(context: Context) {
        // 创建一个长震动模式
        vibrate(context, 300)
    }
}